<?php
	//PDO即PHP数据对象（PHP Data Objec）
	//PDO可被视为一个工具，而这个工具为PHP访问数据库定义了一个轻量级的一致接口
	echo '<pre>';
	//原生php的mysql操作
	// $con = mysqli_connect('localhost','root','root','mytp');
	// if($con)
	// {
	// 	mysqli_query($con,'set names utf8');
	// 	mysqli_query($con,'set character_set_client=utf8');
	// 	mysqli_query($con,'set character_set_results=utf8');
	// 	$mysql = "select * from user where 1";
	// 	$result = $con->query($mysql);

	// 	if($result->num_rows>0)
	// 	{
	// 		$info = [];
	// 		for($i = 0;$row=$result->fetch_assoc();$i++)
	// 		{
	// 			$info[$i] = $row;
	// 		}
	// 		print_r($info);
	// 	}
	// }else{
	// 	echo "connect db failed";
	// }

	//php的PDO连接数据库
	//说明：pdo对象是一个在页面中不可见内容的对象，这个对象只能靠创建成功与失败来判断连接状态 而无法查看内部的属性和属性值
	try{
	$pdo = new PDO('mysql:host=localhost;dbname=mytp','root','root');
	print_r($pdo);
	}catch(PDOException $err){
		echo '出现错误，信息为：'.$err->getMessage();
	}

/*
	PDO异常处理Exception
		异常处理Exception是指在try...catch是发生异常时的处理手段，通常异常处理都是直接抛出提醒即可。而设置提醒的手段有三种设置方式：
		（1）默认模式
			主要依赖于系统提供的errorCode和errorInfo属性实现
		（2）报警模式
			为pdo设置setAttribute（PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING）;
		（3）中断模式
			为pdo设置setAttribute（PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION）;

 */

/*
	正常pdo直接访问：设置sql语句->执行语句
			预处理：设置sql语句->预处理sql语句->处理sql中参数->执行sql语句

 */

/*
	PDO预处理prepare
		预处理语句prepare是pdo提供的一种db操作方式。其语言逻辑与正常的pdo访问相同。但区别在于prepare语句允许用户在【设置sql语句】与【执行sql语句】之间部分进行参数注入与提取操作，而不是像正常的pdo访问一样直接将参数写死。

		（1）prepare（）方法 和 execute（）方法
		（2）bindValue（）方法
		（3）bindColumn（）方法

	（1）
	prepare（）让pdo预先处理半成品sql语句
	execute（）将参数带入到预处理的sql语句中
	例子：
		$sql = "insert into friendslist values(?,?,?,?)";
		$pdoso = $pdo -> prepare($sql);
		echo $pdoso->execute(arry("炒鸡大美女"，"femla",99,1234567890))

	
	（2）bindValue()方法
	描述：bindValue()方法是提供给pdo预处理之后得到的PDOSO对象使用的方法用来给【半成品】的sql语句进行传值。
	语法：$pdoso->bindValue(index,value);
	说明：
		（1）第一个参数表示给sql语句中第几个参数传值
		（2）第二个参数表示给sql语句中的对应参数传的具体的值
		（3）bindValue一次绑定一个参数，如果有多个则需要调用多次
	例子：
		$sql = "insert into friendslist values(?,?,?,?)";
		$pdoso->bindValue(1,'炒鸡炒鸡大美女');
		$pdoso->bindValue(2,'female');
		$pdoso->bindValue(3,666);
		$pdoso->bindValue(4,1322321123);
		echo $pdoso->execute();



	（3）
	bindColumn()方法允许将执行结果的一列数据绑定到一个指定对象上，
	本方法需要在execute（）方法执行结束后再执行。
	$pdoso->bindColumn(index,变量)
		（1）第一个参数表示结果中的第几列数据，第一列就写1，以此类推。
		（2）第二个参数表示数据要赋值给那个变量，随便一个变量即可。
		（3）bindColumn（）方法一次绑定一列给一个变量，如需绑定多个，则执行多次即可。
	例子： 
		$sql = "select * from friendslist";
		$pdoso = $pdo->prepare($sql);
		$pdoso->execute();
		$pdoso->bindColumn(1,$friendsName);
		$pdoso->bindColumn(2,$friendsSex);
		while ($row = $pdoso->fetch(PDO::FETCH_COLUMN)) {
			echo "{$friendsName}","{$friendsSex}","<br/>";
		}
*/

/*
	PDO事务处理transaction
	事务：多个事件组成的结构。
	注意：
		（1）整个事务操作必须放到try...catch，这是因为我们并不能保证执行的事件一定成功。而对于整个事务而言，任何一个事件的失败都会导致catch的触发。而catch触发就意味着必须将之前做出的所有的操作都必须还原
		回滚操作：$pdo->rollBack()

		（2）操作语句必须再事务开启之后执行，在事务提交之前停止
			开启事务：$pdo->beginTransaction();
			关闭事务：$pdo->commit();
	 
		（3）中文处理方案（避免乱码）：
			读取：$pdo->query("set names utf8");
			插入：$pdo->exec('set names utf8');

 */



?>